﻿#pragma once

#include <boost/signal.hpp>
#include <boost/ptr_container/ptr_vector.hpp>
#include <SFML/Graphics.hpp>
#include "../../abstract/IAccusationView.h"
#include "../../../domain/models/CardSet.h"
#include "../../../domain/models/Player.h"
#include "../../../domain/network/GameClient.h"
#include "../../../domain/network/PlayerClient.h"

namespace Views {
	/**
	* Widoki graczy podłączonych do serwera, których nie trwa aktualnie tura
	*/
	namespace Remote {
		class AccusationView: public IAccusationView
		{
			Domain::Network::GameClient* client; /**< Klient gracza */
			Cards::CardsCollection cards; /**< Wszystkie karty w grze */
			Players::Player* player;  /**< Gracz, którego jest teraz tura */

		public:
			/**
			* @param game_client Połączony z serwerem klient gry
			*/
			AccusationView(Domain::Network::GameClient*);

			/**
			* Rozpoczyna oczekiwanie na otrzymanie od serwera decyzji o podjęciu oskarżenia
			*/
			void askIfPlayerWantsToPerformAccusation();
			/**
			* Rozpoczyna oczekiwanie na otrzymanie od serwera kart w oskarżeniu
			*/
			void askForCardsInAccusation(Cards::CardsCollection);
		protected:
			/**
			* Funkcja odbierająca od serwera dane o decyzji o podjęciu oskarżenia
			* Wywołuje playerDecisionSetEvent
			* @param packet Pakiet zawierający dane o decyzji
			*/
			void onDecisionSet(sf::Packet packet);
			/**
			* Funkcja odbierająca od serwera dane o kartach w oskarżeniu.
			* Wywołuje cardsInAccusationSetEvent
			* @param packet Pakiet zawierający karty
			*/
			void onCardsSet(sf::Packet packet);
		};
	}
}

